This project is a redesign of the open source FM synthesiser PreenFM2 created by Xavier Hosxe.
Improvements from the original version:
fewer and cheaper components
single PCB (cheaper)
4 separate audio channels (on 2 stereo 6.3mm audio jacks)
stereo DAC chip PCM5102 can be driven directly by the I2S processor's interfaces (faster);
sample resolution can be increased to 24 or 32 bits
headphones stereo amplifier (up to 2 × 175mW on 8ohm loads) on stereo 3.5mm jack
one extra encoder and separate encoder switches
all buttons and encoders are handled by a separate STM32F1 processor so they don't need to be constantly scanned
an interrupt (Srf_Int) is generated when a new surface event is detected and the main processor can then interrogate the slave STM32F1 for changed inputs with just a fast SPI transaction
digital volume control (range is -46dBu to 2dBu).
global volume is controller by encoder5 independently by STM32F1 which also converts rotations to a logarithmic scale STM32F1 can remember previous volume settings and restore them
Korg Volca FM is a great little FM synthesizer which also includes
a step sequencer.
Inside there are 2 PCBs linked together via a 7pin connector. The main
PCB has an ARM-CortexM4 which is the core of the whole synthesizer, all
waveforms are computed inside this device. The second PCB has the touch
sensitive keys and the sequencer LEDs which are all handled by a support
microcontroller from Cypress. The two processors are probably talking to
each other via the SPI interface (I haven't checked this).
There are 11 + 2 linear potentiometers on this board, each producing
an analog voltage between 0-3.3V. These analog voltages are multiplexed
and the read directly by two ADCs inputs of the ARM processor. A separate
rotary encoder selects the algorithm.
Click on the images bellow to identify all the ICs used in this design:
The integrated circuits and their datasheets used in this device are:
There is only one DIN5 connector for MIDI In mainly for saving space but the MIDI Out
pins are available and clearly marked on the board if someone wants to solder a second
pigtail DIN connector. The MIDI Out is not so important if one doesn't want to use the
internal sequencer to drive other instruments.
The touch keys of the Volca FM are not really made for playing, they feel more like
toy keys so the great majority of users are playing the synthesizer via MIDI In.
Unfortunately there is a major drawback by doing this, the NoteOn velocity parameter
is ignored by the Volca. You can still change the velocity of the played notes using
the slider potentiometer but you cannot do this remotely.
A firmware update could easily solve this problem but that seems unlikely to happen.
Personally I don't see any kind of hardware limitation that pushed Korg to this
decision.
There are a few workarounds for this problem. One is to buy the commercial
RK-002MIDI cable which has a programmable
microcontroller inside. I don't like this mainly because this cable plus shipping
is so expensive that it reaches almost half of the VolcaFM selling price.
Another issue is that you have to pay attention to the direction in which
you insert this cable.
I opted for a much less expensive mod which uses a little AVR processor. I've chosen
an OpenLog board for its small size. You can purchase this board for 3-4$ delivered
from various places like AliExpress and EBay.
The board is about 15×15mm in size and has all the necessary connections
routed to .1" pins. The SPI on one side of the board needs to be used to
program a special MIDI bootloader which after reset will listen for SysEx
messages to load and program the main code running on this AVR chip. The
microSD socket on the back of the PCB won't be used and it's better to mask it
with tape to prevent any contacts with the components inside the Volca.
The board is small enough to fit near the MIDI In socket, where to optocoupler
is located. Just four wires are needed to solder it inside: Vcc and Gnd to
ground and 3.3V, Rx to the optocoupler output and Tx to the corresponding
serial input of the ARM processor. The original trace between the optocoupler
and the ARM processor needs to be cut.
The crystal on the OpenLog board is 16MHz which divides exactly to get the
MIDI bitrate of 31250 bauds. The processor main code will intercept all the
NoteOn messages "9n kk vv" and send before another Velocity message of
"Bn 29 vv" followed by the unchanged NoteOn.
The insertion of this AVR processor will delay all the MIDI messages with
about 1ms which is imperceptible. Also to avoid changing the global velocity
before each played note first it should compare the new velocity to the previous
one and ignore it if it doesn't differ more than +/-5 (velocity ranges from 0-127).
This mod will work for all of the Volca synthesizers series and also has the
advantage of easy reprogram the code inside the AVR (bypassing it entirely
if so needed) via SysEx messages using a free program like like MIDIOx on PC
or SysEx Librarian on Mac OS.
To dump or program the Volca (or recover from a brick event) connect a J-Link
interface to the SwD 6 pin connector and issue the following commands in the cmd
line utility (usually JLinkExe):
si swd
speed auto
device MB9BF164L
connect
-- then --
savebin fw_name.bin,0x0,0x40000
--- or ---
loadfile fw_name_1.bin 0x0
loadfile fw_name_2.bin 0x20000